/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.foxinline.manager.pesquisar;

import br.com.foxinline.modelo.Curso;
import br.com.foxinline.modelo.Grupo;
import br.com.foxinline.modelo.Usuario;
import br.com.foxinline.servico.CursoServico;
import br.com.foxinline.servico.GrupoServico;
import br.com.foxinline.servico.UsuarioServico;
import br.com.foxinline.utilitario.Msg;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

/**
 *
 * @author ely
 */
@ViewScoped
@ManagedBean
public class ManagerPesquisarUsuario {

    @EJB
    UsuarioServico usuarioServico;
    @EJB
    GrupoServico grupoService;
    @EJB
    CursoServico cursoServico;
    private List<Grupo> grupos;
    private List<Grupo> gruposVisualizar;
    private List<Grupo> grupoSelecionado;
    private Usuario usuario;
    private Usuario usuarioVisualizar;
    private Usuario usuarioEditar;
    private Usuario usuarioLogin;
    private Usuario usuarioExcluir;
    private List<Usuario> usuarios;
    private String usuEd;
    private String usuVi;
    private String usuLo;
    private String senhaAntiga;
    private String senha;
    private String novaSenha;
    private Curso curso;
    private List<Curso> cursos;

    @PostConstruct
    public void init() {
        usuario = new Usuario();
        usuarios = new ArrayList<Usuario>();

        curso = new Curso();
        cursos = cursoServico.pesquisarTodos();

        Map<String, String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
        usuEd = params.get("usuEd");
        usuVi = params.get("usuVi");
        usuLo = params.get("usuLo");

        paramPost();

    }

    public void pesquisar() {
        usuarios = usuarioServico.pesquisarUsuario(usuario);
    }

    public void atualizar() {
        try {
            if (usuarioServico.usuarioObrigatorio(usuarioEditar)) {
                usuarioEditar.setCurso(curso);
                usuarioEditar.setGrupos(grupoSelecionado);
                usuarioServico.atualizar(usuarioEditar);
                Msg.messagemInfo(Msg.SuccessFull);

            } else {
                Msg.messagemWarn("O campo nome é obrigatório");
            }
        } catch (Exception erro) {
        }
    }

    public void atualizarLogin() {
        try {
            if (usuarioServico.verificaSenhaAntiga(senhaAntiga, usuarioLogin)) {
                if (usuarioServico.senhaObrigatorio(usuarioLogin)) {
                    usuarioLogin.setSenha(novaSenha);
                    if (usuarioServico.verificaSenha(senha, usuarioLogin)) {
                        usuarioLogin.setSenha(Usuario.encryptPassword(usuarioLogin.getSenha()));
                        usuarioServico.atualizar(usuarioLogin);
                        senhaAntiga = new String();
                        Msg.messagemInfo(Msg.SuccessFull);
                    } else {
                        Msg.messagemWarn("Senhas não conferem");
                    }
                } else {
                    Msg.messagemWarn("O campo senha é obrigatório");
                }

            } else {
                Msg.messagemWarn("Senha antiga incorreta");
            }
        } catch (Exception erro) {
        }

    }

    public void paramPost() {
        try {
            if (usuEd != null) {
                usuarioEditar = usuarioServico.pesquisar(Long.parseLong(usuEd));
                grupoSelecionado = grupoService.findGrupos(usuarioEditar);
                grupos = grupoService.pesquisarTodos();
                usuarioEditar.setGrupos(grupos);
                curso = usuarioEditar.getCurso();
            }
            if (usuVi != null) {
                usuarioVisualizar = usuarioServico.pesquisar(Long.parseLong(usuVi));
                gruposVisualizar = grupoService.findGrupos(usuarioVisualizar);
            }
            if (usuLo != null) {
                usuarioLogin = usuarioServico.pesquisar(Long.parseLong(usuLo));
//                setorVisualizar = usuarioVisualizar.getSetor();
//                gruposVisualizar = grupoService.findGrupos(usuarioVisualizar);
            }
        } catch (Exception erro) {
        }
    }

    public void setUsuariorr(Usuario usuario) {
        this.usuarioExcluir = usuario;
        System.out.println("ANTES DO CLIQUE" + this.usuarioExcluir);
    }

    public void excluir() {
        try {
            usuarios.remove(usuarioExcluir);
            this.usuarioExcluir.setAtivo(Boolean.FALSE);
            usuarioServico.atualizar(usuarioExcluir);
            Msg.messagemInfo(Msg.SuccessFull);
        } catch (Exception erro) {
        }
    }

    public boolean isAdmin() {
        Grupo g = grupoService.pesquisar(1L);

        for (Grupo grupo : usuarioServico.getCurrentUser().getGrupos()) {
            if (grupo.getNome().equals(g.getNome())) {
                return true;
            }
        }

        return false;
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public Usuario getUsuarioVisualizar() {
        return usuarioVisualizar;
    }

    public void setUsuarioVisualizar(Usuario usuarioVisualizar) {
        this.usuarioVisualizar = usuarioVisualizar;
    }

    public Usuario getUsuarioEditar() {
        return usuarioEditar;
    }

    public void setUsuarioEditar(Usuario usuarioEditar) {
        this.usuarioEditar = usuarioEditar;
    }

    public List<Usuario> getUsuarios() {
        return usuarios;
    }

    public void setUsuarios(List<Usuario> usuarios) {
        this.usuarios = usuarios;
    }

    public List<Grupo> getGrupos() {
        return grupos;
    }

    public void setGrupos(List<Grupo> grupos) {
        this.grupos = grupos;
    }

    public List<Grupo> getGrupoSelecionado() {
        return grupoSelecionado;
    }

    public void setGrupoSelecionado(List<Grupo> grupoSelecionado) {
        this.grupoSelecionado = grupoSelecionado;
    }

    public List<Grupo> getGruposVisualizar() {
        return gruposVisualizar;
    }

    public void setGruposVisualizar(List<Grupo> gruposVisualizar) {
        this.gruposVisualizar = gruposVisualizar;
    }

    public String getSenhaAntiga() {
        return senhaAntiga;
    }

    public void setSenhaAntiga(String senhaAntiga) {
        this.senhaAntiga = senhaAntiga;
    }

    public Usuario getUsuarioLogin() {
        return usuarioLogin;
    }

    public void setUsuarioLogin(Usuario usuarioLogin) {
        this.usuarioLogin = usuarioLogin;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    public String getNovaSenha() {
        return novaSenha;
    }

    public void setNovaSenha(String novaSenha) {
        this.novaSenha = novaSenha;
    }

    public Curso getCurso() {
        return curso;
    }

    public void setCurso(Curso curso) {
        this.curso = curso;
    }

    public List<Curso> getCursos() {
        return cursos;
    }

    public void setCursos(List<Curso> cursos) {
        this.cursos = cursos;
    }
}
